Yuming

新手如何编程

三年五载,觉今是而昨非,三年前学海孤舟,临高山而企盼,而今重头,薄冰御风而行,才觉高山幻影,直到遇见下一座山。

前端、服务器、数据库,一个基于网络的程序,必不可少这三个部分;每个部分延伸出几个工种,都一入禅门深似海。三个月课程结束,我写出一个跑通这三个模块的程序,放在浏览器、微信或本地。另外一个时候,我只写出几个网站的静态页面。

那时候我用另一种姿势学编程。

三年前,在学校最后一年,想尝试互联网行业,跃跃欲试学编程。和毕业学生一样,课少、事少、图书馆教材多、时间大把,在w3c上一条一条跟着写,这里一个p元素,那里一个h元素,一行行英文,堆出一个个页面。自觉小有所成,买回基本前端教材,通读完毕。这样日夜积累,直到写出一张简陋静态前端网页,遇到各种css框架。不知道选哪个好,就再没有打开过那段代码。

现在,工作三年、没看一本书、精力变少,相同时间内编程学习效率为什么精进?时也异也?如果把学编程当成任意学一门技术,不同方法之间,效率千差万别。哪种方法代表先进的生产力?高效的学习方法有哪些特征?Py104让我在目标导向、任务结构、生产工具这三个方面找到线索。

单挑知识VS解决问题

如何提高学习效率?预期先行,也就是学一项技能前,你脑海中会有学成之后会变成什么样的图景。好奇被满足、时间没有虚度、挑战舒适圈、找到一份工作、解决某个问题?每个人学习前动机,和学习中持续的心态建设,少不了预期的参与。预期变得更具体,是为目标。它只是学习策略因果链中的一个环节,但改变目标,影响策略、效率、结果。

三年前学编程,心中没有目标、节点、里程碑,只是好奇网页如何写出来,希望学习成之后更了网络世界。只是怎样算学成?刷完一本教程、上线一个网站、高仿一张PS、得到业内工程师肯定?当时这些心里毫无准绳。面对琐碎知识点和零散教材,像走进没有电线杆的沙漠。独行或结伴,看不见参照,不知身在何处;找不到终点,不知道何时结束;想继续前行,发现已无动力。

再次学习,换了节奏。课程预热时你知道何时开始、何时结束:从你进到一个学习空间-开智学堂App卡包,它像一个容器随时开放;到最后完成结业项目,它在你心中埋下一个产品。你也知道做到什么样,算是越过一座沙丘,可以庆祝:第一次提交当周小作业,输入提交按下会回车键,黑底白字的新命令行出现那一刻,心情像收到另一个星球文明的来信。从此,每周交作业惯例,像宗教仪式,只有提交、回车才能触发这个仪式。

从预期和成果,从小任务到大项目叠加成闭环,你会得到更清晰行动指引。如阳志平老师在《工作谈》中说,“你要有里程碑;你要赋予自己的行动或作品实践仪式感。有清晰的开始、结束,这样你才能一次又一次提高自己的行动力和自信心。”

大道阳关VS幽静崎岖

学新东西,会让你适应陌生环境、解决新问题,比如Python安装各种库和框架的生产环境。学习时心态从轻松、挑战到畏惧,会有不同结果。心态轻松,觉得一切容易,机械重复,没有学习。挑战时,心态受阻,但费力行动,找到新解决办法。下次遇到同样环境和问题,回到轻松心态。畏难情绪下,阻碍和陌生完全抑制行动,学习同样进展缓慢。游戏好玩,因为它给你连续有难度的进阶任务-那种稍微费神、尝试几次就可以完成的任务。设计科学的课程,也让你一直停留在挑战心态。

新进入一个领域,容易只见树叶,在短暂的入门之后,迷失在陡峭的学习曲线之前。新手思维让单挑一个个知识点,一路刷下去,像一直走在阳关大道,路上暖阳和风;直到有天,你抬头看见峭壁,手中没有绳梯。

精心设计的学习曲线,初探如崎岖小径,路途之中你接到包袱,只取所需,闻到青草,披荆斩棘,一路向前。比如同样是w3c上前端教程,自学新手会把所有html标签元素刷一遍,拿一张结构复杂的PS图开始写代码;沿着刷知识点-组合模块-模仿网页这一自下而上路径。在Py104,你先接到任务,比如实查询功能。在任务指引中,你发现,查询需要表单,表单需要哪些输入框和按钮,再到w3c中找出这些元素。这是按照问题-解决方案-分解方案-找素材的行动路径。不断定义、拆解、查询、试验、修正、解决,加之编译器给你即时反馈,在一个个循环中,心流自然涌现。

拆分任务、逐个解决,也是Py104结业典礼上,大妈提到的MVP思维:“将任务分解成为可以解决,或可以找人来解决的模块,这样任何工作都可以事半功倍。”

代码无涯VS复用轮子

学生会时代常到听言论:书本上知识和工作脱节。现在看来,脱节更多是因为缺少实践环境,让你实际使用知识。学院派知识和生产环境的知识一样,道理相通,只是学院中无法用上它们。自学也是如此,寸进有寸进的欢喜,但脱离生产环境,只为单个知识点写代码,你会不停陷入写一行行代码,实现一个小变化,距完成还有很长的路。

我初学前端样式,花费大量时间改CSS代码,沉浸在一个个元素尺寸、列表行间距地细节中。一周之后交付一张网页,却不尽如人意。那时候,我还没有碰到Bootstrap。它已经定义好间距、尺寸、配色、缩进。第一次上手,同样级别的网页,四小时之内做出优雅简明的样式。Bootstrap自带符合网页审美的样式,历经多代网站设计规范的试炼和淘汰,最终留了下来,成为框架。

在实际工作中,大量代码被封装成像Bootstrap一样的框架,这些框架沉淀了专家和工程师多年的内隐知识,变成你的易用工具。这些工具往往迭代快,沉淀在网络中而非印刷版教材中。如果以解决问题的工程能力,而非以研究代码、创新语言为目标,直接上手用轮子,会比不停重复造轮子更快达到目标。好的方法,直接给你上手高生产力工具,将你丢在一线工程师的前沿环境中。工具不是学习的辅助,而是学习本身。

教程让你学会核心语法,窥探语言全貌,高效解决问题,需要你直接装上轮子。

小结

编程作为科技文明产物,让你感受到人头脑中有优雅的逻辑。优雅背后,也会狼狈垫脚,胡乱张望。何不让习得编程,或学习本身这件事也更有效?从Py104中,我们找到明确预期、科学设计任务,善用先进工具这三件思维利器。

新手泛舟海上,少有风平浪静的时候。无数夜晚忙了又忙,无数苦水尝了又尝。借云帆之力,之后学海书山依旧,但也享受乘风破浪的乐趣。

ChangeLog

2017-11-17 第三组块补充例子、调整结构;结尾呼应开头隐喻